# Write a function to delete a node (except the tail) in a singly linked list,
# given only access to that node.
#
# Given linked list -- head = [4,5,1,9], which looks like following:
#
# 4 - > 5 - > 1 - > 9
#
# Input: head = [4,5,1,9], node = 5
# Output: [4,1,9]
# Explanation: You are given the second node with value 5, the linked list should
# become 4 -> 1 -> 9 after calling your function.
#
# Input: head = [4,5,1,9], node = 1
# Output: [4,5,9]
# Explanation: You are given the third node with value 1, the linked list should
# become 4 -> 5 -> 9 after calling your function.
#
# The linked list will have at least two elements.
# All of the nodes' values will be unique.
# The given node will not be the tail and it will always be a valid node of the linked list.
# Do not return anything from your function


class ListNode:
    def __init__(self, val):
        self.val = val
        self.next = None


class Solution:
    def delete(self, node):
        node.val = node.next.val
        node.next = node.next.next


if __name__ == "__main__":
    node = ListNode(4)
    node.next = ListNode(5)
    node.next.next = ListNode(1)
    node.next.next.next = ListNode(9)
    test = node
    while test:
        print(test.val)
        test = test.next
    print("after deleting")
    Solution().delete(node.next)
    while node:
        print(node.val)
        node = node.next
